﻿// 204 汉密尔顿回路.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>


using namespace std;
/*
http://oj.daimayuan.top/course/14/problem/632


给你一张无向简单图，请问能否从指定起点出发找到一条汉密尔顿回路。

输入格式
第一行两个整数 n,m，表示图的顶点数和边数，顶点编号从 1到 n。

接下来 m行，每行两个整数 x,y，表示 x号点和 y号点之间有一条边。

接下来一行，一个整数 k，表示起始节点编号。

输出格式
输出一行一个字符串，如果能找到从 k号点出发的汉密尔顿回路，输出 Yes， 否则输出 No。

样例输入
4 5
1 2
2 3
1 3
1 4
2 4
4
样例输出
Yes
数据规模
对于所有数据，保证 2≤n≤8,0≤m≤n(n−1)/2,1≤x,y,k≤n。
*/

int n, m, k;
vector<int> edge[20001];
bool b[20001];

bool dfs(int x,int c) {
	if (c == n && x == k )
		return true;
	for (auto y : edge[x]) {
		if (!b[y]) {
			b[y] = true;
			if (dfs(y, c + 1))
				return true;
			b[y] = false;
		}
	}
	return false;
}

int main()
{
	scanf("%d%d",&n,&m);
	for (int i = 1; i <= m; i++) {
		int x, y;
		scanf("%d%d",&x,&y);
		edge[x].push_back(y);
		edge[y].push_back(x);
	}
	scanf("%d",&k);
	if (dfs(k, 0)) {
		printf("Yes\n");
	}
	else {
		printf("No\n");
	}

	return  0;
}

 